package com.io.example.demoparent.task;

import io.netty.util.HashedWheelTimer;
import io.netty.util.Timeout;
import io.netty.util.TimerTask;

import java.time.LocalDateTime;
import java.util.concurrent.TimeUnit;

/***
 * HashedWheelTimer 是使用定时轮实现的，定时轮其实就是一种环型的数据结构，可以把它想象成一个时钟，分成了许多格子，每个格子代表一定的时间，
 * 在这个格子上用一个链表来保存要执行的超时任务，同时有一个指针一格一格的走，走到那个格子时就执行格子对应的延迟任务
 */
public class DelayTaskExample_02 {
    public static void main(String[] args) {

        System.out.println("程序启动时间：" + LocalDateTime.now());
        nettyTask();
    }



    public static  void nettyTask(){
        /***
         * 时间间隔
         * 时间为单位
         * 时间轮槽数
         */
        HashedWheelTimer timer = new HashedWheelTimer(1
                , TimeUnit.SECONDS
                , 2);


        TimerTask task = new TimerTask() {
            @Override
            public void run(Timeout timeout) throws Exception {
                System.out.println("执行的任务时间 = "+ LocalDateTime.now());
            }
        };

        timer.newTimeout(task,3,TimeUnit.SECONDS);


        TimerTask task2 = new TimerTask() {
            @Override
            public void run(Timeout timeout) throws Exception {
                System.out.println("执行的任务时间 = "+ LocalDateTime.now());
            }
        };

        timer.newTimeout(task,2,TimeUnit.SECONDS);
    }




}
